/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.input;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IUserInformation;
import fr.generali.refservcommuns.clients.resume.dto.v3.contextevisibilite.ContexteVisibilite;
import fr.generali.refservcommuns.clients.servperscom.v4.contextevisibilite.DtoContexteVisibilite;
import fr.generali.refservcommuns.rce.demat.servperscom.contextevisibilite.DtoContexteVisibiliteDemat;

/**
 * Permet de construire un objet {@link DtoContexteVisibilite}
 * 
 * @author Guillaume Lancelin
 */
@Component("visibiliteBuilder")
public class VisibiliteBuilder {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(VisibiliteBuilder.class);

    /**
     * L'assembler pour créer la visibilité
     */
    @Autowired
    @Qualifier("userInformation2DtoContexteVisibiliteConverter")
    private Converter<IUserInformation, DtoContexteVisibilite> userInformation2DtoContexteVisibiliteConverter;

    /**
     * L'assembler pour créer la visibilité demat
     */
    @Autowired
    @Qualifier("userInformation2DtoContexteVisibiliteDematConverter")
    private Converter<IUserInformation, DtoContexteVisibiliteDemat> userInformation2DtoContexteVisibiliteDematConverter;

    /**
     * L'assembler pour créer la visibilité
     */
    @Autowired
    @Qualifier("userInformation2ContexteVisibiliteConverter")
    private Converter<IUserInformation, ContexteVisibilite> userInformation2ContexteVisibiliteConverter;

    /**
     * Construit la visibilité pour les appels client RCE
     * 
     * @param userInformation les informations utilisateur
     * @param listeCodeIntermediaire la liste des codse intermédiaires
     * @return un {@link DtoContexteVisibilite}
     */
    protected DtoContexteVisibilite buildVisibilite(IUserInformation userInformation,
                    List<String> listeCodeIntermediaire) {
        LOGGER.info("buildVisibilite");
        DtoContexteVisibilite visibilite = userInformation2DtoContexteVisibiliteConverter.convert(userInformation);
        if (listeCodeIntermediaire != null) {
            visibilite.getIdIntermediaire().addAll(listeCodeIntermediaire);
        }

        return visibilite;
    }

    /**
     * Construit la visibilité pour les appels client RCE
     * 
     * @param userInformation les informations utilisateur
     * @param listeCodeIntermediaire la liste des codse intermédiaires
     * @return un {@link DtoContexteVisibiliteDemat}
     */
    protected DtoContexteVisibiliteDemat buildVisibiliteDemat(IUserInformation userInformation,
                    List<String> listeCodeIntermediaire) {
        LOGGER.info("buildVisibilite");
        DtoContexteVisibiliteDemat visibilite =
                        userInformation2DtoContexteVisibiliteDematConverter.convert(userInformation);
        if (listeCodeIntermediaire != null) {
            visibilite.getIdIntermediaire().addAll(listeCodeIntermediaire);
        }

        return visibilite;
    }

    /**
     * Construit la visibilité pour les appels client RCE
     * 
     * @param userInformation les informations utilisateur
     * @param listeCodeIntermediaire la liste des codse intermédiaires
     * @return un {@link DtoContexteVisibilite}
     */
    public ContexteVisibilite buildVisibiliteResume(IUserInformation userInformation,
                    List<String> listeCodeIntermediaire) {
        LOGGER.info("buildVisibiliteResume");
        ContexteVisibilite visibilite = userInformation2ContexteVisibiliteConverter.convert(userInformation);
        if (listeCodeIntermediaire != null) {
            visibilite.getIdIntermediaire().addAll(listeCodeIntermediaire);
        }

        return visibilite;
    }

}
